package com.tensquare.article.service.impl;

import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.tensquare.article.dao.ArticleMapper;
import com.tensquare.article.pojo.Article;
import com.tensquare.article.service.ArticleService;
import com.tensquare.util.IdWorker;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Set;

@Service
public class ArticleServiceImpl implements ArticleService {

    @Autowired
    private ArticleMapper articleMapper;
    @Autowired
    private IdWorker idWorker;

    //查询全部文章
    @Override
    public List<Article> findAll() {
        return articleMapper.selectList(null); //不传参数使用null
    }
    //根据id查询文章
    @Override
    public Article findById(String articleId) {
        return articleMapper.selectById(articleId);
    }

    //新增文章
    @Override
    public void save(Article article) {
        //设置分布式id
        article.setId(idWorker.nextId()+"");
        //初始化浏览量、点赞数、评论数为0
        article.setVisits(0);
        article.setThumbup(0);
        article.setComment(0);
        articleMapper.insert(article);
    }

    //更新文章
    @Override
    public void updateById(String articleId, Article article) {
        //设置id
        article.setId(articleId);
        //根据id进行修改
        articleMapper.updateById(article);
    }

    //删除文章
    @Override
    public void deleteById(String articleId) {
        articleMapper.deleteById(articleId);
    }

    @Override
    public Page<Article> search(Integer page, Integer size, Map<String, Object> map) {
        //创建查询条件对象
        EntityWrapper wrapper = new EntityWrapper();
        //设置查询条件，遍历得到key和value
        Set<String> keySet = map.keySet();
        for (String key : keySet) {
            //传统方式，先判断map是否有值
            /*if (map.get(key) != null) {
                wrapper.eq(key,map.get(key)); //把key和value作为查询条件
            }*/
            //参数1：判断条件(是否把后面条件加入到查询条件中)，参数2：数据库的column字段，参数3：字段对应的值
            //和上面的if判断的写法是一样的效果，实现动态sql
            wrapper.eq(map.get(key) != null, key, map.get(key));
        }
        //设置分页参数
        Page<Article> pageData = new Page<>(page,size);
        System.out.println("分页参数："+pageData);
        //执行查询（第一个参数是分页参数，第二个是查询条件）
        List<Article> list = articleMapper.selectPage(pageData, wrapper);
        for (Article article : list) {
            System.out.println("分页查询的结果集"+article);
        }
        //把查询到的结果集设置到分页参数中
        pageData.setRecords(list);
        System.out.println("设置结果集的分页参数："+pageData);
        return pageData;
    }

}
